﻿using System;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;

namespace Mvc3App.Dominio
{
    public class Socio : BaseEntity
    {
        [Required(ErrorMessage = "El DNI es requerido.")]
        public virtual string Documento { get; set; }
        [Required(ErrorMessage = "El apellido es requerido.")]
        public virtual string Apellido { get; set; }
        [Required(ErrorMessage = "El nombre es requerido.")]
        public virtual string Nombre { get; set; }
        [Required(ErrorMessage = "La fecha de nacimiento es requerida.")]
        [DataType(DataType.Date)]
        public virtual DateTime? FechaNacimiento { get; set; }
        public virtual string Ocupacion { get; set; }
        public virtual string Matricula { get; set; }
        public virtual DateTime? FechaIngreso { get; set; }
        public virtual DateTime? FechaAlta { get; set; }
        public virtual string Reparticion { get; set; }
        public virtual string Condicion { get; set; }
        [DataType(DataType.Date)]
        public virtual DateTime? Reempadronado { get; set; }

        public virtual string NroBeneficiario { get; set; }
        public virtual string SubNroBeneficiario { get; set; }
        [DataType(DataType.Date)]
        public virtual DateTime? FechaAltaBeneficiario { get; set; }

        [Required(ErrorMessage = "El domicilio es requerido.")]
        public virtual string Domicilio { get; set; }
        [Required(ErrorMessage = "La localidad es requerida.")]
        public virtual string Localidad { get; set; }
        public virtual string CodigoPostal { get; set; }
        public virtual string Nacionalidad { get; set; }
        public virtual string Telefono { get; set; }
        public virtual string Observaciones { get; set; }

        public virtual string NroSucursal { get; set; }
        public virtual string TipoDeCuenta { get; set; }
        public virtual string NroDeCuenta { get; set; }
        public virtual string CBU { get; set; }
        public virtual string CodigoMinisterio { get; set; }
        public virtual bool? DebitoAutomatico { get; set; }

        public virtual string Programa { get; set; }
        [Required(ErrorMessage = "El sexo es requerido.")]
        public int? Sexo { get; set; }
        [NotMapped]
        public SexoEnum? SexoEnum
        {
            get
            {
                if (Sexo.HasValue)
                {
                    return (SexoEnum)Sexo;    
                }
                return null;
            }
            set { Sexo = Convert.ToInt32(value); }
        }
        [Required(ErrorMessage = "El grupo sanguineo es requerido.")]
        public int? GrupoSanguineo { get; set; }
        [NotMapped]
        public GrupoSanguineoEnum? GrupoSanguineoEnum
        {
            get
            {
                if (GrupoSanguineo.HasValue)
                {
                    return (GrupoSanguineoEnum)GrupoSanguineo;    
                }
                return null;
            }
            set { GrupoSanguineo = Convert.ToInt32(value); }
        }
        [Required(ErrorMessage = "El factor sanguineo es requerido.")]
        public int? FactorSanguineo { get; set; }
        [NotMapped]
        public FactorSanguineoEnum? FactorSanguineoEnum
        {
            get
            {
                if (FactorSanguineo.HasValue)
                {
                    return (FactorSanguineoEnum)FactorSanguineo;    
                }
                return null;
            }
            set { FactorSanguineo = Convert.ToInt32(value); }
        }

        public virtual DateTime? FechaBaja { get; set; }

        public virtual int? Edad
        {
            get
            {
                int? edad = null;

                if (FechaNacimiento.HasValue)
                {
                    edad = DateTime.Today.Year - FechaNacimiento.Value.Year;
                    if (DateTime.Today.Month < FechaNacimiento.Value.Month || (DateTime.Today.Month == FechaNacimiento.Value.Month && DateTime.Today.Day < FechaNacimiento.Value.Day))
                        edad--;
                }

                return edad;
            }
        }
    }

    public enum SexoEnum
    {
        Masculino = 1,
        Femenino
    }

    public enum GrupoSanguineoEnum
    {
        A = 1,
        B,
        AB,
        Cero
    }

    public enum FactorSanguineoEnum
    {
        Positivo = 1,
        Negativo
    }
}